using System;
using MicrosoftResearch.Infer;
using MicrosoftResearch.Infer.Distributions;
using MicrosoftResearch.Infer.Collections;
using MicrosoftResearch.Infer.Factors;

namespace MicrosoftResearch.Infer.Models.User
{
	/// <summary>
	/// Class for performing inference in model 'Model' using algorithm 'ExpectationPropagation'.
	/// </summary>
	/// <remarks>
	/// The easiest way to use this class is to wrap an instance in a CompiledAlgorithm object and use
	/// the methods on CompiledAlgorithm to set parameters and execute inference.
	/// 
	/// If you instead wish to use this class directly, you must perform the following steps:
	/// 1) Create an instance of the class
	/// 2) Set the value of any externally-set fields e.g. data, priors
	/// 3) Call the Reset() method
	/// 4) Call the Initialise() method once
	/// 5) Call the Update() method multiple times  - each call performs one iteration of inference
	/// 6) Use the XXXMarginal() methods to retrieve posterior marginals for different variables.
	/// 
	/// Generated by Infer.NET 2.3 beta 4 at 19:13 on 21 May 2010.
	/// </remarks>
	public class Model73_EP : IIterativeProcess
	{
		#region Fields
		// Messages from uses of 'vbool302'
		public Bernoulli[] vbool302_uses_B;
		// The constant 'vBernoulli145'
		public Bernoulli vBernoulli145;
		// Message from definition of 'vbool302'
		public Bernoulli vbool302_F;
		// Messages from uses of 'vbool308'
		public Bernoulli[] vbool308_uses_B;
		// The constant 'vBernoulli151'
		public Bernoulli vBernoulli151;
		// Message from definition of 'vbool308'
		public Bernoulli vbool308_F;
		// Messages from uses of 'vbool309'
		public Bernoulli[] vbool309_uses_B;
		// Message from definition of 'vbool309'
		public Bernoulli vbool309_F;
		// Messages from uses of 'vbool298'
		public Bernoulli[] vbool298_uses_B;
		// The constant 'vBernoulli141'
		public Bernoulli vBernoulli141;
		// Message from definition of 'vbool298'
		public Bernoulli vbool298_F;
		// Messages from uses of 'vbool304'
		public Bernoulli[] vbool304_uses_B;
		// The constant 'vBernoulli147'
		public Bernoulli vBernoulli147;
		// Message from definition of 'vbool304'
		public Bernoulli vbool304_F;
		// Messages from uses of 'vbool310'
		public Bernoulli[] vbool310_uses_B;
		// Message from definition of 'vbool310'
		public Bernoulli vbool310_F;
		// Messages from uses of 'vbool311'
		public Bernoulli[] vbool311_uses_B;
		// Message from definition of 'vbool311'
		public Bernoulli vbool311_F;
		// Messages from uses of 'vbool299'
		public Bernoulli[] vbool299_uses_B;
		// The constant 'vBernoulli142'
		public Bernoulli vBernoulli142;
		// Message from definition of 'vbool299'
		public Bernoulli vbool299_F;
		// Messages from uses of 'vbool305'
		public Bernoulli[] vbool305_uses_B;
		// The constant 'vBernoulli148'
		public Bernoulli vBernoulli148;
		// Message from definition of 'vbool305'
		public Bernoulli vbool305_F;
		// Messages from uses of 'vbool312'
		public Bernoulli[] vbool312_uses_B;
		// Message from definition of 'vbool312'
		public Bernoulli vbool312_F;
		// Messages from uses of 'vbool313'
		public Bernoulli[] vbool313_uses_B;
		// Message from definition of 'vbool313'
		public Bernoulli vbool313_F;
		// Messages from uses of 'vbool300'
		public Bernoulli[] vbool300_uses_B;
		// The constant 'vBernoulli143'
		public Bernoulli vBernoulli143;
		// Message from definition of 'vbool300'
		public Bernoulli vbool300_F;
		// Messages from uses of 'vbool306'
		public Bernoulli[] vbool306_uses_B;
		// The constant 'vBernoulli149'
		public Bernoulli vBernoulli149;
		// Message from definition of 'vbool306'
		public Bernoulli vbool306_F;
		// Messages from uses of 'vbool314'
		public Bernoulli[] vbool314_uses_B;
		// Message from definition of 'vbool314'
		public Bernoulli vbool314_F;
		// Messages from uses of 'vbool315'
		public Bernoulli[] vbool315_uses_B;
		// Message from definition of 'vbool315'
		public Bernoulli vbool315_F;
		// Messages from uses of 'vbool301'
		public Bernoulli[] vbool301_uses_B;
		// The constant 'vBernoulli144'
		public Bernoulli vBernoulli144;
		// Message from definition of 'vbool301'
		public Bernoulli vbool301_F;
		// Messages from uses of 'vbool307'
		public Bernoulli[] vbool307_uses_B;
		// The constant 'vBernoulli150'
		public Bernoulli vBernoulli150;
		// Message from definition of 'vbool307'
		public Bernoulli vbool307_F;
		// Messages from uses of 'vbool316'
		public Bernoulli[] vbool316_uses_B;
		// Message from definition of 'vbool316'
		public Bernoulli vbool316_F;
		// Messages from uses of 'vbool317'
		public Bernoulli[] vbool317_uses_B;
		// Message from definition of 'vbool317'
		public Bernoulli vbool317_F;
		// Message to definition of 'vbool309'
		public Bernoulli vbool309_B;
		// Messages to uses of 'vbool308'
		public Bernoulli[] vbool308_uses_F;
		// Messages to uses of 'vbool302'
		public Bernoulli[] vbool302_uses_F;
		// Message to definition of 'vbool311'
		public Bernoulli vbool311_B;
		// Messages to uses of 'vbool310'
		public Bernoulli[] vbool310_uses_F;
		// Message to definition of 'vbool310'
		public Bernoulli vbool310_B;
		// Messages to uses of 'vbool304'
		public Bernoulli[] vbool304_uses_F;
		// Messages to uses of 'vbool298'
		public Bernoulli[] vbool298_uses_F;
		// Messages to uses of 'vbool309'
		public Bernoulli[] vbool309_uses_F;
		// Message to definition of 'vbool313'
		public Bernoulli vbool313_B;
		// Messages to uses of 'vbool312'
		public Bernoulli[] vbool312_uses_F;
		// Message to definition of 'vbool312'
		public Bernoulli vbool312_B;
		// Messages to uses of 'vbool305'
		public Bernoulli[] vbool305_uses_F;
		// Messages to uses of 'vbool299'
		public Bernoulli[] vbool299_uses_F;
		// Messages to uses of 'vbool311'
		public Bernoulli[] vbool311_uses_F;
		// Message to definition of 'vbool315'
		public Bernoulli vbool315_B;
		// Messages to uses of 'vbool314'
		public Bernoulli[] vbool314_uses_F;
		// Message to definition of 'vbool314'
		public Bernoulli vbool314_B;
		// Messages to uses of 'vbool306'
		public Bernoulli[] vbool306_uses_F;
		// Messages to uses of 'vbool300'
		public Bernoulli[] vbool300_uses_F;
		// Messages to uses of 'vbool313'
		public Bernoulli[] vbool313_uses_F;
		// Message to definition of 'vbool317'
		public Bernoulli vbool317_B;
		// Messages to uses of 'vbool316'
		public Bernoulli[] vbool316_uses_F;
		// Message to definition of 'vbool316'
		public Bernoulli vbool316_B;
		// Messages to uses of 'vbool307'
		public Bernoulli[] vbool307_uses_F;
		// Messages to uses of 'vbool301'
		public Bernoulli[] vbool301_uses_F;
		// Messages to uses of 'vbool315'
		public Bernoulli[] vbool315_uses_F;
		// The constant 'vBernoulli127'
		public Bernoulli vBernoulli127;
		// Message to marginal of 'vbool309'
		public Bernoulli vbool309_marginal_B;
		// Message to marginal of 'vbool310'
		public Bernoulli vbool310_marginal_B;
		// Message to marginal of 'vbool311'
		public Bernoulli vbool311_marginal_B;
		// Message to marginal of 'vbool312'
		public Bernoulli vbool312_marginal_B;
		// Message to marginal of 'vbool313'
		public Bernoulli vbool313_marginal_B;
		// Message to marginal of 'vbool314'
		public Bernoulli vbool314_marginal_B;
		// Message to marginal of 'vbool315'
		public Bernoulli vbool315_marginal_B;
		// Message to marginal of 'vbool316'
		public Bernoulli vbool316_marginal_B;
		// Message to marginal of 'vbool317'
		public Bernoulli vbool317_marginal_B;
		// Message to marginal of 'vbool302'
		public Bernoulli vbool302_marginal_B;
		// Message to marginal of 'vbool308'
		public Bernoulli vbool308_marginal_B;
		// Message to marginal of 'vbool298'
		public Bernoulli vbool298_marginal_B;
		// Message to marginal of 'vbool304'
		public Bernoulli vbool304_marginal_B;
		// Message to marginal of 'vbool299'
		public Bernoulli vbool299_marginal_B;
		// Message to marginal of 'vbool305'
		public Bernoulli vbool305_marginal_B;
		// Message to marginal of 'vbool300'
		public Bernoulli vbool300_marginal_B;
		// Message to marginal of 'vbool306'
		public Bernoulli vbool306_marginal_B;
		// Message to marginal of 'vbool301'
		public Bernoulli vbool301_marginal_B;
		// Message to marginal of 'vbool307'
		public Bernoulli vbool307_marginal_B;
		#endregion

		#region Methods
		/// <summary>
		/// Configures constant values that will not change during the lifetime of the class.
		/// </summary>
		/// <remarks>
		/// This method should be called once only after the class is instantiated.  In future, it will likely become
		/// the class constructor.
		/// </remarks>
		public void Reset()
		{
			// Create array for 'vbool302_uses' backwards messages.
			this.vbool302_uses_B = new Bernoulli[1];
			this.vBernoulli145 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool302_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli145);
			}
			this.vbool302_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli145);
			// Message to 'vbool302' from Random factor
			this.vbool302_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli145);
			// Create array for 'vbool308_uses' backwards messages.
			this.vbool308_uses_B = new Bernoulli[1];
			this.vBernoulli151 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool308_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli151);
			}
			this.vbool308_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli151);
			// Message to 'vbool308' from Random factor
			this.vbool308_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli151);
			// Create array for 'vbool309_uses' backwards messages.
			this.vbool309_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool309_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool309_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool298_uses' backwards messages.
			this.vbool298_uses_B = new Bernoulli[1];
			this.vBernoulli141 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool298_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli141);
			}
			this.vbool298_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli141);
			// Message to 'vbool298' from Random factor
			this.vbool298_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli141);
			// Create array for 'vbool304_uses' backwards messages.
			this.vbool304_uses_B = new Bernoulli[1];
			this.vBernoulli147 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool304_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli147);
			}
			this.vbool304_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli147);
			// Message to 'vbool304' from Random factor
			this.vbool304_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli147);
			// Create array for 'vbool310_uses' backwards messages.
			this.vbool310_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool310_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool310_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool311_uses' backwards messages.
			this.vbool311_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool311_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool311_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool299_uses' backwards messages.
			this.vbool299_uses_B = new Bernoulli[1];
			this.vBernoulli142 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool299_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli142);
			}
			this.vbool299_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli142);
			// Message to 'vbool299' from Random factor
			this.vbool299_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli142);
			// Create array for 'vbool305_uses' backwards messages.
			this.vbool305_uses_B = new Bernoulli[1];
			this.vBernoulli148 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool305_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli148);
			}
			this.vbool305_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli148);
			// Message to 'vbool305' from Random factor
			this.vbool305_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli148);
			// Create array for 'vbool312_uses' backwards messages.
			this.vbool312_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool312_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool312_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool313_uses' backwards messages.
			this.vbool313_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool313_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool313_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool300_uses' backwards messages.
			this.vbool300_uses_B = new Bernoulli[1];
			this.vBernoulli143 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool300_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli143);
			}
			this.vbool300_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli143);
			// Message to 'vbool300' from Random factor
			this.vbool300_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli143);
			// Create array for 'vbool306_uses' backwards messages.
			this.vbool306_uses_B = new Bernoulli[1];
			this.vBernoulli149 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool306_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli149);
			}
			this.vbool306_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli149);
			// Message to 'vbool306' from Random factor
			this.vbool306_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli149);
			// Create array for 'vbool314_uses' backwards messages.
			this.vbool314_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool314_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool314_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool315_uses' backwards messages.
			this.vbool315_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool315_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool315_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool301_uses' backwards messages.
			this.vbool301_uses_B = new Bernoulli[1];
			this.vBernoulli144 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool301_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli144);
			}
			this.vbool301_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli144);
			// Message to 'vbool301' from Random factor
			this.vbool301_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli144);
			// Create array for 'vbool307_uses' backwards messages.
			this.vbool307_uses_B = new Bernoulli[1];
			this.vBernoulli150 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool307_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli150);
			}
			this.vbool307_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli150);
			// Message to 'vbool307' from Random factor
			this.vbool307_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli150);
			// Create array for 'vbool316_uses' backwards messages.
			this.vbool316_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool316_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool316_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool317_uses' backwards messages.
			this.vbool317_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool317_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool317_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool309_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool308_uses' forwards messages.
			this.vbool308_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool308_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli151);
			}
			// Message to 'vbool308_uses' from UsesEqualDef factor
			this.vbool308_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool308_uses_B, this.vbool308_F, 0, this.vbool308_uses_F[0]);
			// Create array for 'vbool302_uses' forwards messages.
			this.vbool302_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool302_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli145);
			}
			// Message to 'vbool302_uses' from UsesEqualDef factor
			this.vbool302_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool302_uses_B, this.vbool302_F, 0, this.vbool302_uses_F[0]);
			// Message to 'vbool309' from AreEqual factor
			this.vbool309_F = BooleanAreEqualOp.AreEqualAverageConditional(this.vbool302_uses_F[0], this.vbool308_uses_F[0]);
			this.vbool311_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool310_uses' forwards messages.
			this.vbool310_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool310_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool310_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool304_uses' forwards messages.
			this.vbool304_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool304_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli147);
			}
			// Message to 'vbool304_uses' from UsesEqualDef factor
			this.vbool304_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool304_uses_B, this.vbool304_F, 0, this.vbool304_uses_F[0]);
			// Create array for 'vbool298_uses' forwards messages.
			this.vbool298_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool298_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli141);
			}
			// Message to 'vbool298_uses' from UsesEqualDef factor
			this.vbool298_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool298_uses_B, this.vbool298_F, 0, this.vbool298_uses_F[0]);
			// Message to 'vbool310' from AreEqual factor
			this.vbool310_F = BooleanAreEqualOp.AreEqualAverageConditional(this.vbool298_uses_F[0], this.vbool304_uses_F[0]);
			// Message to 'vbool310_uses' from ReplicateWithMarginal factor
			this.vbool310_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool310_uses_B, this.vbool310_F, 0, this.vbool310_uses_F[0]);
			// Create array for 'vbool309_uses' forwards messages.
			this.vbool309_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool309_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			// Message to 'vbool309_uses' from ReplicateWithMarginal factor
			this.vbool309_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool309_uses_B, this.vbool309_F, 0, this.vbool309_uses_F[0]);
			// Message to 'vbool311' from And factor
			this.vbool311_F = BooleanAndOp.AndAverageConditional(this.vbool309_uses_F[0], this.vbool310_uses_F[0]);
			this.vbool313_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool312_uses' forwards messages.
			this.vbool312_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool312_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool312_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool305_uses' forwards messages.
			this.vbool305_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool305_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli148);
			}
			// Message to 'vbool305_uses' from UsesEqualDef factor
			this.vbool305_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool305_uses_B, this.vbool305_F, 0, this.vbool305_uses_F[0]);
			// Create array for 'vbool299_uses' forwards messages.
			this.vbool299_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool299_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli142);
			}
			// Message to 'vbool299_uses' from UsesEqualDef factor
			this.vbool299_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool299_uses_B, this.vbool299_F, 0, this.vbool299_uses_F[0]);
			// Message to 'vbool312' from AreEqual factor
			this.vbool312_F = BooleanAreEqualOp.AreEqualAverageConditional(this.vbool299_uses_F[0], this.vbool305_uses_F[0]);
			// Message to 'vbool312_uses' from ReplicateWithMarginal factor
			this.vbool312_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool312_uses_B, this.vbool312_F, 0, this.vbool312_uses_F[0]);
			// Create array for 'vbool311_uses' forwards messages.
			this.vbool311_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool311_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			// Message to 'vbool311_uses' from ReplicateWithMarginal factor
			this.vbool311_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool311_uses_B, this.vbool311_F, 0, this.vbool311_uses_F[0]);
			// Message to 'vbool313' from And factor
			this.vbool313_F = BooleanAndOp.AndAverageConditional(this.vbool311_uses_F[0], this.vbool312_uses_F[0]);
			this.vbool315_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool314_uses' forwards messages.
			this.vbool314_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool314_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool314_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool306_uses' forwards messages.
			this.vbool306_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool306_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli149);
			}
			// Message to 'vbool306_uses' from UsesEqualDef factor
			this.vbool306_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool306_uses_B, this.vbool306_F, 0, this.vbool306_uses_F[0]);
			// Create array for 'vbool300_uses' forwards messages.
			this.vbool300_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool300_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli143);
			}
			// Message to 'vbool300_uses' from UsesEqualDef factor
			this.vbool300_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool300_uses_B, this.vbool300_F, 0, this.vbool300_uses_F[0]);
			// Message to 'vbool314' from AreEqual factor
			this.vbool314_F = BooleanAreEqualOp.AreEqualAverageConditional(this.vbool300_uses_F[0], this.vbool306_uses_F[0]);
			// Message to 'vbool314_uses' from ReplicateWithMarginal factor
			this.vbool314_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool314_uses_B, this.vbool314_F, 0, this.vbool314_uses_F[0]);
			// Create array for 'vbool313_uses' forwards messages.
			this.vbool313_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool313_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			// Message to 'vbool313_uses' from ReplicateWithMarginal factor
			this.vbool313_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool313_uses_B, this.vbool313_F, 0, this.vbool313_uses_F[0]);
			// Message to 'vbool315' from And factor
			this.vbool315_F = BooleanAndOp.AndAverageConditional(this.vbool313_uses_F[0], this.vbool314_uses_F[0]);
			this.vbool317_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool316_uses' forwards messages.
			this.vbool316_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool316_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool316_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool307_uses' forwards messages.
			this.vbool307_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool307_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli150);
			}
			// Message to 'vbool307_uses' from UsesEqualDef factor
			this.vbool307_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool307_uses_B, this.vbool307_F, 0, this.vbool307_uses_F[0]);
			// Create array for 'vbool301_uses' forwards messages.
			this.vbool301_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool301_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli144);
			}
			// Message to 'vbool301_uses' from UsesEqualDef factor
			this.vbool301_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool301_uses_B, this.vbool301_F, 0, this.vbool301_uses_F[0]);
			// Message to 'vbool316' from AreEqual factor
			this.vbool316_F = BooleanAreEqualOp.AreEqualAverageConditional(this.vbool301_uses_F[0], this.vbool307_uses_F[0]);
			// Message to 'vbool316_uses' from ReplicateWithMarginal factor
			this.vbool316_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool316_uses_B, this.vbool316_F, 0, this.vbool316_uses_F[0]);
			// Create array for 'vbool315_uses' forwards messages.
			this.vbool315_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool315_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			// Message to 'vbool315_uses' from ReplicateWithMarginal factor
			this.vbool315_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool315_uses_B, this.vbool315_F, 0, this.vbool315_uses_F[0]);
			// Message to 'vbool317' from And factor
			this.vbool317_F = BooleanAndOp.AndAverageConditional(this.vbool315_uses_F[0], this.vbool316_uses_F[0]);
			this.vBernoulli127 = new Bernoulli(0.8);
			// Message to 'vbool317_uses' from EqualRandom factor
			this.vbool317_uses_B[0] = ConstrainEqualRandomOp<bool>.ValueAverageConditional<Bernoulli>(this.vBernoulli127);
			// Message to 'vbool317' from ReplicateWithMarginal factor
			this.vbool317_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool317_uses_B, this.vbool317_B);
			// Message to 'vbool315_uses' from And factor
			this.vbool315_uses_B[0] = BooleanAndOp.AAverageConditional(this.vbool317_B, this.vbool316_uses_F[0]);
			// Message to 'vbool316_uses' from And factor
			this.vbool316_uses_B[0] = BooleanAndOp.BAverageConditional(this.vbool317_B, this.vbool315_uses_F[0]);
			// Message to 'vbool315' from ReplicateWithMarginal factor
			this.vbool315_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool315_uses_B, this.vbool315_B);
			// Message to 'vbool313_uses' from And factor
			this.vbool313_uses_B[0] = BooleanAndOp.AAverageConditional(this.vbool315_B, this.vbool314_uses_F[0]);
			// Message to 'vbool314_uses' from And factor
			this.vbool314_uses_B[0] = BooleanAndOp.BAverageConditional(this.vbool315_B, this.vbool313_uses_F[0]);
			// Message to 'vbool313' from ReplicateWithMarginal factor
			this.vbool313_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool313_uses_B, this.vbool313_B);
			// Message to 'vbool311_uses' from And factor
			this.vbool311_uses_B[0] = BooleanAndOp.AAverageConditional(this.vbool313_B, this.vbool312_uses_F[0]);
			// Message to 'vbool312_uses' from And factor
			this.vbool312_uses_B[0] = BooleanAndOp.BAverageConditional(this.vbool313_B, this.vbool311_uses_F[0]);
			// Message to 'vbool311' from ReplicateWithMarginal factor
			this.vbool311_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool311_uses_B, this.vbool311_B);
			// Message to 'vbool309_uses' from And factor
			this.vbool309_uses_B[0] = BooleanAndOp.AAverageConditional(this.vbool311_B, this.vbool310_uses_F[0]);
			// Message to 'vbool310_uses' from And factor
			this.vbool310_uses_B[0] = BooleanAndOp.BAverageConditional(this.vbool311_B, this.vbool309_uses_F[0]);
			// Message to 'vbool309' from ReplicateWithMarginal factor
			this.vbool309_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool309_uses_B, this.vbool309_B);
			// Message to 'vbool302_uses' from AreEqual factor
			this.vbool302_uses_B[0] = BooleanAreEqualOp.AAverageConditional(this.vbool309_B, this.vbool308_uses_F[0]);
			// Message to 'vbool308_uses' from AreEqual factor
			this.vbool308_uses_B[0] = BooleanAreEqualOp.BAverageConditional(this.vbool309_B, this.vbool302_uses_F[0]);
			// Message to 'vbool310' from ReplicateWithMarginal factor
			this.vbool310_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool310_uses_B, this.vbool310_B);
			// Message to 'vbool298_uses' from AreEqual factor
			this.vbool298_uses_B[0] = BooleanAreEqualOp.AAverageConditional(this.vbool310_B, this.vbool304_uses_F[0]);
			// Message to 'vbool304_uses' from AreEqual factor
			this.vbool304_uses_B[0] = BooleanAreEqualOp.BAverageConditional(this.vbool310_B, this.vbool298_uses_F[0]);
			// Message to 'vbool312' from ReplicateWithMarginal factor
			this.vbool312_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool312_uses_B, this.vbool312_B);
			// Message to 'vbool299_uses' from AreEqual factor
			this.vbool299_uses_B[0] = BooleanAreEqualOp.AAverageConditional(this.vbool312_B, this.vbool305_uses_F[0]);
			// Message to 'vbool305_uses' from AreEqual factor
			this.vbool305_uses_B[0] = BooleanAreEqualOp.BAverageConditional(this.vbool312_B, this.vbool299_uses_F[0]);
			// Message to 'vbool314' from ReplicateWithMarginal factor
			this.vbool314_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool314_uses_B, this.vbool314_B);
			// Message to 'vbool300_uses' from AreEqual factor
			this.vbool300_uses_B[0] = BooleanAreEqualOp.AAverageConditional(this.vbool314_B, this.vbool306_uses_F[0]);
			// Message to 'vbool306_uses' from AreEqual factor
			this.vbool306_uses_B[0] = BooleanAreEqualOp.BAverageConditional(this.vbool314_B, this.vbool300_uses_F[0]);
			// Message to 'vbool316' from ReplicateWithMarginal factor
			this.vbool316_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool316_uses_B, this.vbool316_B);
			// Message to 'vbool301_uses' from AreEqual factor
			this.vbool301_uses_B[0] = BooleanAreEqualOp.AAverageConditional(this.vbool316_B, this.vbool307_uses_F[0]);
			// Message to 'vbool307_uses' from AreEqual factor
			this.vbool307_uses_B[0] = BooleanAreEqualOp.BAverageConditional(this.vbool316_B, this.vbool301_uses_F[0]);
		}

		/// <summary>
		/// Creates message arrays and initialises their values ready for inference to be performed.
		/// </summary>
		/// <remarks>
		/// This method should be called once each time inference is performed. Since the initialisation
		/// procedure normally dependson external values such as priors and array sizes, all external
		/// values must be set before calling this method.
		/// 
		/// As well as initialising message arrays, this method also performs any message passing that
		/// the scheduler determines need only be carried out once.
		/// </remarks>
		public void Initialise()
		{
			this.vbool309_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool310_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool311_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool312_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool313_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool314_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool315_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool316_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool317_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool302_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli145);
			this.vbool308_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli151);
			this.vbool298_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli141);
			this.vbool304_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli147);
			this.vbool299_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli142);
			this.vbool305_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli148);
			this.vbool300_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli143);
			this.vbool306_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli149);
			this.vbool301_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli144);
			this.vbool307_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli150);
			// Message to 'vbool317_marginal' from ReplicateWithMarginal factor
			this.vbool317_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool317_uses_B, this.vbool317_F, this.vbool317_marginal_B);
			// Message to 'vbool315_marginal' from ReplicateWithMarginal factor
			this.vbool315_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool315_uses_B, this.vbool315_F, this.vbool315_marginal_B);
			// Message to 'vbool316_marginal' from ReplicateWithMarginal factor
			this.vbool316_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool316_uses_B, this.vbool316_F, this.vbool316_marginal_B);
			// Message to 'vbool313_marginal' from ReplicateWithMarginal factor
			this.vbool313_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool313_uses_B, this.vbool313_F, this.vbool313_marginal_B);
			// Message to 'vbool314_marginal' from ReplicateWithMarginal factor
			this.vbool314_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool314_uses_B, this.vbool314_F, this.vbool314_marginal_B);
			// Message to 'vbool311_marginal' from ReplicateWithMarginal factor
			this.vbool311_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool311_uses_B, this.vbool311_F, this.vbool311_marginal_B);
			// Message to 'vbool312_marginal' from ReplicateWithMarginal factor
			this.vbool312_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool312_uses_B, this.vbool312_F, this.vbool312_marginal_B);
			// Message to 'vbool309_marginal' from ReplicateWithMarginal factor
			this.vbool309_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool309_uses_B, this.vbool309_F, this.vbool309_marginal_B);
			// Message to 'vbool310_marginal' from ReplicateWithMarginal factor
			this.vbool310_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool310_uses_B, this.vbool310_F, this.vbool310_marginal_B);
			// Message to 'vbool302_marginal' from UsesEqualDef factor
			this.vbool302_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool302_uses_B, this.vbool302_F, this.vbool302_marginal_B);
			// Message to 'vbool308_marginal' from UsesEqualDef factor
			this.vbool308_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool308_uses_B, this.vbool308_F, this.vbool308_marginal_B);
			// Message to 'vbool298_marginal' from UsesEqualDef factor
			this.vbool298_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool298_uses_B, this.vbool298_F, this.vbool298_marginal_B);
			// Message to 'vbool304_marginal' from UsesEqualDef factor
			this.vbool304_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool304_uses_B, this.vbool304_F, this.vbool304_marginal_B);
			// Message to 'vbool299_marginal' from UsesEqualDef factor
			this.vbool299_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool299_uses_B, this.vbool299_F, this.vbool299_marginal_B);
			// Message to 'vbool305_marginal' from UsesEqualDef factor
			this.vbool305_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool305_uses_B, this.vbool305_F, this.vbool305_marginal_B);
			// Message to 'vbool300_marginal' from UsesEqualDef factor
			this.vbool300_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool300_uses_B, this.vbool300_F, this.vbool300_marginal_B);
			// Message to 'vbool306_marginal' from UsesEqualDef factor
			this.vbool306_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool306_uses_B, this.vbool306_F, this.vbool306_marginal_B);
			// Message to 'vbool301_marginal' from UsesEqualDef factor
			this.vbool301_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool301_uses_B, this.vbool301_F, this.vbool301_marginal_B);
			// Message to 'vbool307_marginal' from UsesEqualDef factor
			this.vbool307_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool307_uses_B, this.vbool307_F, this.vbool307_marginal_B);
		}

		/// <summary>
		/// Performs one iteration of inference.
		/// </summary>
		/// <remarks>
		/// This method should be called multiple times, after calling Initialise(), in order to perform
		/// multiple iterations of message passing.  You can call methods to retrieve posterior marginals
		/// at any time - the returned marginal will be the estimated marginal given the current state of
		/// the message passing algorithm.  This can be useful for monitoring convergence of the algorithm.
		/// 
		/// Where the scheduler has determined inference can be performed without iteration, this method
		/// does nothing.
		/// </remarks>
		public void Update()
		{
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool317' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool317Marginal()
		{
			return this.vbool317_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool315' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool315Marginal()
		{
			return this.vbool315_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool316' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool316Marginal()
		{
			return this.vbool316_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool313' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool313Marginal()
		{
			return this.vbool313_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool314' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool314Marginal()
		{
			return this.vbool314_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool311' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool311Marginal()
		{
			return this.vbool311_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool312' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool312Marginal()
		{
			return this.vbool312_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool309' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool309Marginal()
		{
			return this.vbool309_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool310' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool310Marginal()
		{
			return this.vbool310_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool302' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool302Marginal()
		{
			return this.vbool302_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool308' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool308Marginal()
		{
			return this.vbool308_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool298' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool298Marginal()
		{
			return this.vbool298_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool304' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool304Marginal()
		{
			return this.vbool304_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool299' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool299Marginal()
		{
			return this.vbool299_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool305' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool305Marginal()
		{
			return this.vbool305_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool300' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool300Marginal()
		{
			return this.vbool300_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool306' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool306Marginal()
		{
			return this.vbool306_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool301' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool301Marginal()
		{
			return this.vbool301_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool307' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool307Marginal()
		{
			return this.vbool307_marginal_B;
		}

		#endregion

	}

}
